Use case: CRC accumulate

This sequence diagram illustrates a CRC calculation by chunks.

Accumulation is required when the input data is not entirely accessible, allowing for processing data chunks as they become available.

Sequence diagram

CRC accumulation by chunks (polling mode)

  @startuml

  == Initialization ==

  "Application" -> "CRC" : HAL_CRC_Init()
  "CRC" --> "Application" : hal status : HAL_OK or HAL_INVALID_PARAM

  == Process : Polling mode ==

  "Application" -> "CRC" : HAL_CRC_Calculate
  "CRC" --> "Application" : HAL_OK
  ...
  ...
  ...
  ...
  ...

  "Application" -> "CRC" : HAL_CRC_Accumulate
  "CRC" --> "Application" : HAL_OK

  @enduml

Code snippet

HAL1

HAL2

HAL_CRC_Init(&hcrc);




uwCRCValue = HAL_CRC_Calculate(&hcrc,
                               (uint32_t *)&aDataBuffer,
                               BUFFER_SIZE);



uwCRCAccValue = HAL_CRC_Accumulate(&hcrc,
                                (uint32_t *)&aDataBuffer,
                                BUFFER_SIZE)
HAL_CRC_Init(&hCRC, HAL_CRC);

/* The HAL_CRC_SetConfig() is not required when the default
configuration is applied */
HAL_CRC_SetConfig(&hCRC, &crc_config);

HAL_CRC_Calculate(pCRC,
                  &DataBuffer,
                  sizeof(uint32_t) * BUFFER_SIZE,
                  &CrcValue);


HAL_CRC_Accumulate(pCRC,
                  &DataBuffer,
                  sizeof(uint32_t) * BUFFER_SIZE,
                  &CrcValue)

Key changes

  1. In HAL2, configuration through HAL_CRC_SetConfig() is optional when the default configuration is applied.

  2. In HAL2, HAL_CRC_Calculate() and HAL_CRC_Accumulate() can return additional statuses (for example HAL_INVALID_PARAM and HAL_BUSY).